package lgp1816;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;

public class Main {

	static final int N = 500001;
	static int n,m;
	static int[] a = new int[N];
	
	//输入优化
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer st = new StreamTokenizer(br);
	static int rd() throws IOException {
		st.nextToken();
		return (int) st.nval;
	}
	
	//长度500000的st表数组的k值最大不会超过20
	static int[][] dp = new int[N][20]; 
	//建立ST表
	static void stInit() {
		//区间长度为1，直接赋值
		for(int i=1;i<=m;i++) {
			dp[i][0] = a[i];
		}
		
		//计算k的最大值p，p=log2(数据总长度)
		//2的p次方小于等于数据长度，2的p+1次方大于数据总长度
		//Math.log()计算e为底的对数，这里用了数学中的换底公式
		int p = (int)(Math.log(m)/Math.log(2.0));
		
		//递推计算st表
		//位运算1<<k表示2的k次方
		//位运算1<<(k-1)表示2的k-1次方
		//m表示原数组长度
		//s、k参见资料文档
		for(int k=1;k<=p;k++) {
			for(int s=1;s+(1<<k)<=m+1;s++) {
				//dp[s][k]区间由组成他的两个小区间构成
				dp[s][k]=Math.min(dp[s][k-1], dp[s+(1<<(k-1))][k-1]);
			}
		}
	}
	
	//L、R表示左右端点
	//返回区间最大值
	static int stQuery(int L,int R) {
		//计算k的值
		//2的k次方小于查询区间长度，2的k+1次方大于查询区间长度
		//Math.log()计算e为底的对数，这里用了数学中的换底公式
		int k = (int)(Math.log(R-L+1)/Math.log(2.0));
		//两个小区间拼出被查询区间
		return Math.min(dp[L][k], dp[R-(1<<k)+1][k]);
	}
	
	public static void main(String[] args) throws IOException {
		
		
        
        //String[] lineArr = br.readLine().split(" ");
        
        //m = Integer.parseInt(lineArr[0]);
        //n = Integer.parseInt(lineArr[1]);
		m = rd();
		n = rd();
        
        //读取数据，a[]下标从1开始
        //lineArr = br.readLine().split(" ");
        for(int i=1;i<=m;i++) {
        	//a[i] = Integer.parseInt(lineArr[i-1]);
        	a[i] = rd();
        }
        
        //建立ST表
        stInit();
        
        StringBuilder sb = new StringBuilder();
        while(n>0) {
        	//lineArr = br.readLine().split(" ");
        	//int l = Integer.parseInt(lineArr[0]);
        	//int r = Integer.parseInt(lineArr[1]);
        	int l=rd();
        	int r=rd();
        			
        	
        	sb.append(stQuery(l,r));
        	sb.append(" ");
        	
        	n--;
        }
        
        System.out.println(sb.toString());
	}

}
